package com.gzsxy.esjy.message.dispatch;


import com.gzsxy.esjy.bus.message.InnerProtocol;
import com.gzsxy.esjy.message.netty.Message;
import io.netty.channel.Channel;

import java.util.function.Function;

/**
 * 消息分派
 * @author zhangxiaolong
 *
 */
public interface MessageDispatch {

	/**
	 * 总线到websocket
	 * @param message 消息内容
	 * @param dest 具体的服务名
	 */
	public void busToWebSocket(InnerProtocol message, String dest) ;
	
	/**
	 * webSocket到总线
	 * @param channel
	 * @param message
	 */
	public void webSocketToBus(Channel channel, Message message) ;
	
	/**
	 * 关闭通道
	 * @param channel
	 */
	public void channelCloseEvent(Channel channel) ;

	/**
	 * 手动订阅
	 * @param topic  主题
	 * @param channel  通道
	 * @param removeBroadcast 是否将当前通道从broadcast主题中移除
	 */
	public void addSubscrib(String topic,Channel channel,boolean removeBroadcast);

	/**
	 * 消息转换
	 * @param topic
	 * @param function
	 */
	public void addMessageConver(String topic, Function<InnerProtocol,Object> function);
}
